#!/bin/bash
# MVP范围定义与功能设计一体化生成器
# 用途：根据用户需求自动生成MVP定义和功能设计文档

set -euo pipefail

# 配置
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly OUTPUT_BASE="tmp"
readonly PROMPT_FILE="mvp-function-design-prompt.md"

# 颜色输出
color() {
  local color_code="$1"; shift
  echo -e "\033[${color_code}m$*\033[0m"
}

info() { color "32" "[INFO] $*"; }
warn() { color "33" "[WARN] $*"; }
error() { color "31" "[ERROR] $*"; }

# 显示帮助
show_help() {
cat << 'EOF'
MVP范围定义与功能设计一体化生成器

用途：
  根据用户需求自动生成MVP定义和功能设计文档

使用方法：
  ./generate-mvp-design.sh [选项] "需求描述"

选项：
  -n, --name NAME         项目名称 (默认从需求描述提取)
  -o, --output DIR        输出目录 (默认: tmp)
  -d, --dryrun           预览模式，不生成文件
  -v, --verbose          详细输出
  -h, --help             显示帮助

示例：
  # 基本用法
  ./generate-mvp-design.sh "智能简历生成工具"
  
  # 指定项目名称
  ./generate-mvp-design.sh -n "ResumeAI" "智能简历生成工具"
  
  # 预览模式
  ./generate-mvp-design.sh -d "在线协作文档编辑器"

输出结构：
  tmp/
  ├── [项目名]/
  │   ├── MVP范围定义.md
  │   ├── 商业模式.md
  │   └── 功能设计/
  │       ├── [功能1]_流程图.md
  │       ├── [功能2]_流程图.md
  │       └── ...
EOF
}

# 从需求描述提取项目名称
extract_project_name() {
  local requirement="$1"
  # 简单的名称提取逻辑，可以根据需要改进
  echo "$requirement" | sed 's/[^a-zA-Z0-9\u4e00-\u9fa5]//g' | cut -c1-20
}

# 创建目录结构
create_directory_structure() {
  local project_name="$1"
  local output_dir="$2"
  local dryrun="${3:-0}"
  
  local project_dir="$output_dir/$project_name"
  local function_dir="$project_dir/功能设计"
  
  if [[ "$dryrun" == "1" ]]; then
    info "预览目录结构:"
    echo "  $project_dir/"
    echo "  ├── MVP范围定义.md"
    echo "  ├── 商业模式.md"
    echo "  └── 功能设计/"
    echo "      ├── [功能1]_流程图.md"
    echo "      └── [功能2]_流程图.md"
  else
    mkdir -p "$function_dir"
    info "创建目录: $project_dir"
  fi
  
  echo "$project_dir"
}

# 生成MVP范围定义文档
generate_mvp_definition() {
  local requirement="$1"
  local project_name="$2"
  local output_file="$3"
  local dryrun="${4:-0}"
  
  local content=$(cat << EOF
# $project_name MVP范围定义

## 需求背景
- **问题描述**: $requirement
- **目标用户**: [请根据需求分析具体的用户画像]
- **核心价值**: [请定义一句话承诺的10倍改进]

## MVP原则
- 只做核心承诺的最短闭环：输入-处理-输出-结果
- 能"人肉"或第三方代替的先代替

## 功能范围划分 (MSCW)

### Must (必须有) - 核心价值实现
- [ ] 核心功能1: [基于需求分析的核心功能] - RICE评分: [待评估]
- [ ] 核心功能2: [支撑核心价值的关键功能] - RICE评分: [待评估]

### Should (应该有) - 体验提升
- [ ] 辅助功能1: [提升用户体验的功能] - RICE评分: [待评估]
- [ ] 辅助功能2: [增强易用性的功能] - RICE评分: [待评估]

### Could (可以有) - 锦上添花
- [ ] 增强功能1: [锦上添花的功能] - 延后实现
- [ ] 增强功能2: [可选的高级功能] - 延后实现

### Won't (暂不做) - 明确边界
- [ ] 复杂功能1: [暂时不做的复杂功能，说明原因]
- [ ] 扩展功能1: [超出MVP范围的扩展功能]

## 里程碑规划
- **1.0版本目标**: 2周内交付可用的核心闭环
- **验收标准**: [具体的成功指标，如用户完成率>70%]
- **风险评估**: [主要技术风险和缓解措施]

## 与功能设计的连接
本文档定义的Must功能将自动生成对应的技术设计方案，包括：
- 完整的用户交互流程图
- 详细的数据库操作设计
- 前后端API接口定义
- 错误处理和异常场景

## 更新记录
- $(date '+%Y-%m-%d'): 初始版本创建
EOF
)
  
  if [[ "$dryrun" == "1" ]]; then
    color "36" "=== 预览: MVP范围定义.md ==="
    echo "$content" | head -20
    color "36" "=== (内容已截断) ==="
  else
    echo "$content" > "$output_file"
    info "生成文件: $output_file"
  fi
}

# 生成商业模式文档
generate_business_model() {
  local requirement="$1"
  local project_name="$2"
  local output_file="$3"
  local dryrun="${4:-0}"
  
  local content=$(cat << EOF
# $project_name 商业模式

## 定价策略
- **主要模式**: 29-99元/月 (订阅优先)
- **备选模式**: 按次数/额度计费
- **价值锚点**: [用户愿意付费的核心价值点]
- **竞品对比**: [同类产品的定价参考]

## 试用策略
- **免费试用**: 3天或3次免费使用
- **限制机制**: 结果带水印，可分享传播
- **转化路径**: 试用 → 体验价值 → 付费转化
- **转化指标**: 目标转化率 15-25%

## 支付方案
- **MVP阶段**: 手动收款/二维码支付
- **后续升级**: 接入微信支付/支付宝
- **财务管理**: 简单的收入跟踪表格

## 增长策略
- **获客渠道**: [基于目标用户的主要获客方式]
- **留存机制**: [用户持续使用的动力设计]
- **推荐机制**: [用户推荐的激励设计]
- **病毒传播**: [利用产品特性的自然传播]

## 成本结构
- **技术成本**: 服务器、域名、第三方服务
- **运营成本**: 客服、内容、推广
- **人力成本**: 开发、维护、运营人员

## 收入预测
- **月度目标**: 第3个月达到20个付费用户
- **年度目标**: 第12个月达到500个付费用户
- **单用户价值**: 年付费金额 × 留存率

## 风险评估
- **市场风险**: [市场接受度、竞争风险]
- **技术风险**: [技术实现难度、扩展性]
- **运营风险**: [用户获取、留存挑战]

## 更新记录
- $(date '+%Y-%m-%d'): 初始版本创建
EOF
)
  
  if [[ "$dryrun" == "1" ]]; then
    color "36" "=== 预览: 商业模式.md ==="
    echo "$content" | head -15
    color "36" "=== (内容已截断) ==="
  else
    echo "$content" > "$output_file"
    info "生成文件: $output_file"
  fi
}

# 生成功能设计模板
generate_function_template() {
  local function_name="$1"
  local output_file="$2"
  local dryrun="${3:-0}"
  
  local content=$(cat << EOF
# ${function_name} 技术设计方案

## 功能概述
- **功能描述**: [详细的功能说明]
- **业务价值**: [该功能解决的具体问题]
- **技术约束**: 2周内可交付，单机优先/低成本

## 1. ${function_name}完整流程图

\`\`\`mermaid
sequenceDiagram
    participant U as 用户
    participant F as 前端页面
    participant B as 后端API
    participant D as 数据库([表名])
    
    Note over U,D: ${function_name}完整流程
    
    %% 1. 用户操作步骤
    U->>F: [具体用户操作]
    F->>U: [前端响应]
    
    %% 2. 前端处理
    F->>F: [前端验证/处理]
    alt [失败条件]
        F->>U: [错误提示]
    else [成功条件]
        F->>B: [API调用] {[参数]}
        
        %% 3. 后端处理
        B->>B: [后端验证/处理]
        
        alt [验证失败]
            B->>F: [错误响应]
            F->>U: [错误显示]
        else [验证通过]
            %% 4. 数据库操作
            B->>D: [具体SQL操作]
            
            alt [数据库操作失败]
                D->>B: [失败结果]
                B->>F: [错误响应]
                F->>U: [错误提示]
            else [数据库操作成功]
                D->>B: [成功结果]
                
                %% 5. 后续处理
                B->>B: [业务逻辑处理]
                B->>F: [成功响应]
                
                %% 6. 前端成功处理
                F->>F: [前端状态更新]
                F->>U: [成功提示]
                F->>U: [页面跳转/更新]
            end
        end
    end
\`\`\`

## 2. ${function_name}数据表操作详情

\`\`\`mermaid
flowchart LR
    subgraph "[表名]表结构"
        A["[表名]表字段:<br/>[字段1] [说明]<br/>[字段2] [说明]<br/>..."]
    end
    
    subgraph "${function_name}操作流程"
        B([步骤1]) --> C([步骤2]) --> D([步骤3])
    end
    
    subgraph "SQL操作"
        E("[操作1]SQL:<br/>[具体SQL语句]")
        F("[操作2]:<br/>[具体操作说明]")
        G("[操作3]SQL:<br/>[具体SQL语句]")
    end
    
    %% 连接关系
    A --> B
    B --> E
    C --> F
    D --> G
    
    %% 样式
    style A fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style E fill:#fff3e0,stroke:#f57c00,stroke-width:2px
    style F fill:#e8f5e8,stroke:#388e3c,stroke-width:2px
    style G fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
\`\`\`

## 3. 技术实现要点
- **前端技术栈**: [推荐的技术选型]
- **后端技术栈**: [推荐的技术选型]
- **数据库设计**: [表结构和索引建议]
- **API接口**: [关键接口定义]
- **错误处理**: [异常场景处理方案]
- **性能考虑**: [性能优化建议]

## 4. 开发计划
- **预估工期**: [开发时间评估]
- **技术风险**: [主要技术难点]
- **测试要点**: [关键测试场景]
- **上线检查**: [发布前检查清单]

## 更新记录
- $(date '+%Y-%m-%d'): 初始版本创建
EOF
)
  
  if [[ "$dryrun" == "1" ]]; then
    color "36" "=== 预览: ${function_name}_流程图.md ==="
    echo "$content" | head -20
    color "36" "=== (内容已截断) ==="
  else
    echo "$content" > "$output_file"
    info "生成文件: $output_file"
  fi
}

# 主函数
main() {
  local requirement=""
  local project_name=""
  local output_dir="$OUTPUT_BASE"
  local dryrun=0
  local verbose=0
  
  # 解析参数
  while [[ $# -gt 0 ]]; do
    case $1 in
      -n|--name)
        project_name="$2"
        shift 2
        ;;
      -o|--output)
        output_dir="$2"
        shift 2
        ;;
      -d|--dryrun)
        dryrun=1
        shift
        ;;
      -v|--verbose)
        verbose=1
        shift
        ;;
      -h|--help)
        show_help
        exit 0
        ;;
      -*)
        error "未知参数: $1"
        show_help
        exit 1
        ;;
      *)
        requirement="$1"
        shift
        ;;
    esac
  done
  
  # 检查必需参数
  if [[ -z "$requirement" ]]; then
    error "请提供需求描述"
    show_help
    exit 1
  fi
  
  # 提取或使用项目名称
  if [[ -z "$project_name" ]]; then
    project_name=$(extract_project_name "$requirement")
  fi
  
  info "开始生成MVP设计文档..."
  info "需求: $requirement"
  info "项目名: $project_name"
  
  # 创建目录结构
  local project_dir
  project_dir=$(create_directory_structure "$project_name" "$output_dir" "$dryrun")
  
  # 生成文档
  generate_mvp_definition "$requirement" "$project_name" "$project_dir/MVP范围定义.md" "$dryrun"
  generate_business_model "$requirement" "$project_name" "$project_dir/商业模式.md" "$dryrun"
  
  # 生成示例功能设计模板
  local function_dir="$project_dir/功能设计"
  generate_function_template "核心功能1" "$function_dir/核心功能1_流程图.md" "$dryrun"
  generate_function_template "核心功能2" "$function_dir/核心功能2_流程图.md" "$dryrun"
  
  if [[ "$dryrun" == "1" ]]; then
    info "预览模式完成"
  else
    info "文档生成完成！"
    info "输出目录: $project_dir"
    echo
    echo "📋 下一步操作："
    echo "1. 查看并完善 MVP范围定义.md"
    echo "2. 调整 商业模式.md 中的定价策略"
    echo "3. 根据Must功能列表完善功能设计文档"
    echo "4. 使用AI工具生成具体的流程图和SQL语句"
  fi
}

# 执行主函数
main "$@"
